package com.thiscc.sum.dao;

import java.util.List;

import net.sf.json.JSONArray;

import com.mongodb.DBObject;

/**
 * 共通接口层
 * 
 * @author clare
 * @version 1.0
 * @createTime 2014-08-29
 */
public interface CommonDao {
    
    /**
     * 普通的查询
     * 
     * @param conllection 表名
     * @param conditionBean 查询条件
     * @return
     */
    public List<DBObject> searchCommon(String collection, DBObject conditionBean);
    
    /**
     * 普通的查询（排序）
     * 
     * @param collection 表名
     * @param conditionBran 查新条件
     * @param orderBy 排序字段
     * @return
     */
    public List<DBObject> searchCommon(String collection, DBObject conditionBean, DBObject orderBy);
    
    /**
     * 普通的分页查询
     * 
     * @param collection 表名
     * @param conditionBean 查询条件
     * @param orderBy 排序
     * @param pageNo 分页size
     * @param perPageCount size
     * 
     * @return JSONArray
     */
    public Object searchCommonPage(String collection, DBObject conditionBean, DBObject orderBy, int pageNo,
        int perPageCount);
    
    /**
     * 普通的查询（返回特定字段）
     * 
     * @param collection 表名
     * @param conditionBran 查新条件
     * @param less 返回特定字段集合
     * @return
     */
    public List<DBObject> searchLessCommon(String collection, DBObject conditionBran, DBObject less);
    
    /**
     * 分页排序查找
     * 
     * @param collection 表名
     * @param conditionBean 查询条件
     * @param orderBy 排序字段
     * @param pageNo 页码
     * @param perPageCount  每页记录数
     * @return
     */
    public List<DBObject> searchLessCommon(String collection, DBObject conditionBean, int pageNo, int perPageCount,
        DBObject orderBy);
    
    /**
     * 分页查找集合对象（返回特定字段）
     * 
     * @param collection
     * @param q 查询条件
     * @param fileds 返回字段
     * @param orderBy 排序对象
     * @param pageNo 查询页
     * @param perPageCount 每页记录数
     * @return
     */
    public List<DBObject> searchLessCommon(String collection, DBObject conditionBean, DBObject orderBy, DBObject less,
        int pageNo, int perPageCount);
    
    /**
     * 查找返回特定字段（返回一个List<DBObject>)
     * 
     * @param collection
     * @param conditionBean 查询条件
     * @param filedsBean 返回字段
     * @param orderBy 排序
     */
    public List<DBObject> searchLessCommon(String collection, DBObject conditionBean, DBObject filedsBean,
        DBObject orderBy);
    
    /**
     * 查询单条（返回特定字段）
     * 
     * @param collection
     * @param conditionBran
     * @param less
     * @return
     */
    public DBObject searchLessCommonOne(String collection, DBObject conditionBran, DBObject less);
    
    /**
     * 查询单条
     * 
     * @param collection
     * @param conditionBran
     * @return
     */
    public DBObject searchCommonOne(String collection, DBObject conditionBran);
    
    /**
     * 普通的查询全部
     * 
     * @param conllection 表名
     * @param conditionBean 查询条件
     * @return
     */
    public List<DBObject> searchCommonAll(String collection);
    
    /**
     * 普通的查询全部（返回特定字段）
     * 
     * @param conllection 表名
     * @param conditionBean 查询条件
     * @param less 返回特定字段集合
     * @return
     */
    public List<DBObject> searchLessCommonAll(String collection, DBObject less);
    
    /**
     * 普通的插入
     * 
     * @param conllection 表名
     * @param insertBean 插入对象
     * @return
     */
    public boolean insertCommon(String collection, DBObject insertBean);
    
    /**
     * 普通的批量插入
     * 
     * @param conllection 表名
     * @param insertBean 插入对象
     * @return
     */
    public boolean insertBatchCommon(String collection, List<DBObject> list);
    
    /**
     * 普通的修改
     * 
     * @param collection 表名
     * @param conditionBean 条件
     * @param updateBean 修改内容
     * @return
     */
    public boolean updateCommon(String collection, DBObject conditionBean, DBObject updateBean);
    
    /**
     * 修改数字
     * 
     * @param collection 表名
     * @param conditionBean 条件
     * @param updateBean 修改内容
     * @return
     */
    public boolean updateInt(String collection, DBObject conditionBean, DBObject updateBean);
    /**
     * 添加元素
     * 
     * @param collection 表名
     * @param conditionBean 查询条件
     * @param updateBean 需更新的数据
     * @return 成功或失败标志
     */
    public boolean updateCommonPush(String collection, DBObject conditionBean, DBObject updateBean);
    
    /**
     * 删除元素
     * 
     * @param collection 表名
     * @param conditionBean 查询条件
     * @param updateBean 需更新的数据
     * @return 成功或失败标志
     */
    public boolean updateCommonPull(String collection, DBObject conditionBean, DBObject updateBean);
    
    /**
     * 从两头删除集合中的元素
     * 
     * @param collection 表名
     * @param conditionBean 查询条件
     * @param updatePopBean 更新对象
     * @return
     */
    public boolean updatePopCommon(String collection, DBObject conditionBean, DBObject updatePopBean);
    
    /**
     * 普通删除
     * 
     * @param collection
     * @param condition
     * @return
     */
    public boolean deleteCommon(String collection, DBObject condition);
    
    public JSONArray mapReduceCommon(String collection, String map, String reduce, DBObject q);
    
    /**
     * 得到个数
     * 
     * @param conllection 表名
     * @param conditionBean 查询条件
     * @return
     */
    public long getCommonCount(String collection, DBObject conditionBean);
    
    /**
     * 删除子集合
     * 
     * @param collection
     * @param q 查询条件
     * @param d 删除对象
     */
    public boolean updatePull(String collection, DBObject q, DBObject d);
    
}
